import axios from "axios";
import { ElMessage } from "element-plus";
let baseURL = "http://106.13.143.56:8080";
//1.创建axios实例
const instance = axios.create({
    baseURL,
    timeout: 10000,
    header: { 'Content-Type': 'application/json' }
});
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // console.log("请求拦截器成功",config);
    //1.获取token
    let token = sessionStorage.getItem("token");
    //2.判断token是否存在
    if (token) {
        //3.存在，添加到请求头中
        config.headers["token"] = token;
        config.headers.Authorization = token;

    }
    //4.返回config
    return config;
}, function (error) {
    // 对请求错误做些什么
    // console.log("请求拦截器失败",error);
    return Promise.reject(error);
});
// // 添加响应拦截器
// instance.interceptors.response.use(function (response) {
//     // 2xx 范围内的状态码都会触发该函数。
//     // 对响应数据做点什么
//     console.log("响应拦截器成功",response);
//     return response; 
// }, function (error) {
//     // 超出 2xx 范围的状态码都会触发该函数。
//     // 对响应错误做点什么
//     console.log("响应拦截器失败",error);
//     return Promise.reject(error);

//   }); 
//针对路径传参的处理
function handleUrl(obj) {
    var arr = [];
    for (var key in obj) {
        arr.push(key + "=" + obj[key])
    }
    return arr.join("&")
}
//封装请求方法
async function httpRequest(url, data, method) {
    let config = {
        url,
        data,
        method: method.toLowerCase()
    }
    if (method.toLowerCase() === "get") {
        if (data && JSON.stringify(data) !== "{}") {


            config.url += "?" + handleUrl(data);
        }
    } else {
        if (data && JSON.stringify(data) !== "{}") {
            config.data = data;
        }
    }
    try {
        let res = await instance(config);
        let result = res.data;
        if (result.code === 200) {
            return result;
        } else {
            // ElMessage.error(result);
            return result;
        }
    }
    catch (error) {
        console.log("请求失败", error);
    }
}

//导出
export { httpRequest }
export class Request {
    //封装get请求方法
    static get(url, data) {
        return httpRequest(url, data, "get");
    }
    //封装post请求方法
    static post(url, data) {
        return httpRequest(url, data, "post");
    }
     //封装Put请求方法
    static put(url, data) {
        return httpRequest(url, data, "put");
    }
}
